/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.knolle.lotes.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Date;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import org.marcelo.agro.core.DynamicLookup;
import org.marcelo.agro.core.api.ILotes;
import org.marcelo.agro.entidades.Lotes;
import org.marcelo.agro.entidades.eventos.LotesEvent;
import org.openide.awt.StatusLineElementProvider;
import org.openide.util.Lookup;
import org.openide.util.LookupEvent;
import org.openide.util.LookupListener;
import org.openide.util.lookup.ServiceProvider;

/**
 *
 * @author marcelo
 * La idea de este displayer es mostrar informaciones importantes referentes a los 
 * lotes,  
 * Lotes StatusBar, Mostrar Cantidad de lotes, mostrar sumatoria de superficies, mostrar el lote mas grande
 * Mostrar el Lote mas pequenho, mostrar total lotes propios, mostrar total lotes alquilados
 * 
 * 
 * 
 */


@ServiceProvider(service = StatusLineElementProvider.class)
public class LotesStatusLine implements StatusLineElementProvider{
    
    private static final String TOTAL_LOTES = " Total Lotes: ";
    private static final String TOTAL_LOTES_PROPIOS = " Lotes Propios: ";
    private static final String TOTAL_LOTES_ALQUILADOS = " Lotes Alquilados: ";
    
    Lookup.Result<LotesEvent> result;
     ILotes il;
    
    private static final DateFormat format = DateFormat.getTimeInstance(DateFormat.MEDIUM);
    private static JLabel time = new JLabel(" " + format.format(new Date()) + " ");
    private static JLabel totalLotes = new JLabel(TOTAL_LOTES);
    private static JLabel totalLotesPropios = new JLabel(TOTAL_LOTES_PROPIOS);
    private static JLabel totalLotesAlquilados = new JLabel(TOTAL_LOTES_ALQUILADOS);
    
    private JPanel panelGeneral = new JPanel();
    private JPanel panelHora = new JPanel(new BorderLayout());
    private JPanel panelTotalLotes = new JPanel(new BorderLayout());
    private JPanel panelLotesAlquilados = new JPanel(new BorderLayout());
    private JPanel panelLotesPropios = new JPanel(new BorderLayout());

    public LotesStatusLine() {
        Timer t = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                time.setText(" " + format.format(new Date()) + " ");
            }
        });
        t.start();
        
        result = DynamicLookup.getDefault().lookupResult(LotesEvent.class);
        result.addLookupListener(listener);
        il = Lookup.getDefault().lookup(ILotes.class);
        
        initText(il.countLotesPropios() , il.countLotesAlquilados());
        panelHora.add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.EAST);
        panelHora.add(time, BorderLayout.CENTER);
        
        panelTotalLotes.add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.EAST);
        
        panelTotalLotes.add(totalLotes, BorderLayout.CENTER);
        
        panelLotesAlquilados.add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.EAST);
        panelLotesAlquilados.add(totalLotesAlquilados,BorderLayout.CENTER);
        
        panelLotesPropios.add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.EAST);
        panelLotesPropios.add(totalLotesPropios, BorderLayout.CENTER);
        
        panelGeneral.add(panelTotalLotes);
        panelGeneral.add(panelLotesPropios);
        panelGeneral.add(panelLotesAlquilados);
        panelGeneral.add(panelHora);
        
        
        
        //Este sistema es una prueba nomas, aca tengo que agregar varias cosas
    
    }
    
    
    private void initText(Integer cantlotesPropios, Integer cantLotesAlquilados) {
        totalLotesPropios.setText(TOTAL_LOTES_PROPIOS + cantlotesPropios + " ");
        totalLotesAlquilados.setText(TOTAL_LOTES_ALQUILADOS + cantLotesAlquilados + " " );
        cantlotesPropios += cantLotesAlquilados;
        totalLotes.setText(TOTAL_LOTES + cantlotesPropios + " ");
    }
    

    @Override
    public Component getStatusLineElement() {
        return panelGeneral;
    }
     
    
    private LookupListener listener = new LookupListener() {

        @Override
        public void resultChanged(LookupEvent ev) {
            initText(il.countLotesPropios() , il.countLotesAlquilados());
        }
    };
    
    
    
    
}
